package com.hpeu_12.day1222;

import java.util.Random;

/**
 * @title 数组
 * @author clover
 * 1.什么是数组？
 * 答：是多个相同类型的数据按一定的顺序排列的集合，并使用一个名字来命名，
 * 并通过编号的方式对这些数据进行统一管理
 * 
 * 2.数组的注意事项：
 * （1）数组本身是引用数据类型，而数组中的元素可以是任何数据类型，包括基本数据类型和引用数据类型。
 * （2）创建数组对象会在内存中开辟一整块连续的空间，而数组名中引用的是这块连续空间的首地址。
 * （3）数组的长度一但确定，就不能被修改
 * （4）可以通过索引去访问指定的元素
 * 
 * 3.数组的分类：
 * （1）按照维度：一维数组、二维数组、...、多维数组
 * （2）按照元素的数据类型分：基本数据类型元素的数组，引用数据类型元素的数组（即对象数组）
 * 
 * 4.声明一维数组的语法格式
 * （1）数据类型[] 数组名;
 * （2）数据类型 数组名[];
 * 
 *5.一维数组分配内存空间的语法格式
 *	数组名 = new 数据类型[数组长度];
 *
 *6.一维数组的初始化
 *	（1）静态初始化：在定义数组的同时就为数组元素分配内存空间并初始化
 *	（2）动态初始化：数组声明并分配内存空间与数组的赋值是分开进行的。
 *
 *7.数组元素的默认初始值
 *（1）byte、short、int、long这四种基本数据类型的数组默认初始值为0
 *（2）float、double这两种基本数据类型的数组，默认初始值是0.0
 *（3）char这种基本数据类型数组默认初始值是空格
 *（4）boolean类型数组默认初始值是false
 *（5）引用数据类型（String）数组默认初始值是null
 *
 *8.数组在内存中分配空间
 *
 *总结
 *1.什么是数组？（了解）
 *2.数组的分类：（了解）
 *3.一维数组的声明并分配空间（掌握）
 *4.一维数组的初始化(掌握)
 *5.数组元素的默认初始值(熟悉)
 *6.数组在内存中分配空间(了解)
 *7.增强for循环（foreach）(掌握)
 */
public class ArrayDemo {
	public static void main(String[] args) {
		int age = 18;
		
		//声明一维数组
		//声明数组：(注意Java语言中声明数组时，不能指定其长度)
		int[] grade;
		grade = new int[5];
		
		//声明并分配空间合在一起写
		int[] grade1 = new int[5];
		
		
		//动态初始化
		grade[0] = 80;
		grade[1] = 85;
		grade[2] = 90;
		grade[3] = 95;
		grade[4] = 100;
		//静态初始化
		int grade2[] = new int[] {60,70,80,90,100};
		String[] name = {"张三","李四","王五"};
		
		//数组的默认初始值
		byte[] b = new byte[3];
		System.out.println("byte类型数组的默认初始值为："+b[0]);
		int[] i = new int[3];
		System.out.println("int类型数组的默认初始值为："+i[0]);
		float[] f = new float[3];
		System.out.println("float类型数组的默认初始值为："+f[0]);
		char[] c = new char[3];
		System.out.println("char类型数组的默认初始值为："+c[0]);
		boolean[] boo = new boolean[3];
		System.out.println("boolean类型数组的默认初始值为："+boo[0]);
		String[] str = new String[3];
		System.out.println("String类型数组的默认初始值为："+str[0]);
		
		//数组在内存中分配空间
		int arr[] = new int[5];
		//获取数组的长度：length属性
		int length = arr.length;
		System.out.println("数组的长度为："+length);
		//使用循环给数组赋值
		//创建随机数对象
		Random random = new Random();
		for (int j = 0; j < arr.length; j++) {
			arr[j] = random.nextInt(101);//[0,101)
		}
		//只能输出一个数组元素
		System.out.println("数组的第一个元素："+arr[0]);
		//遍历(循环)数组：依次访问数组中的每一个元素
		for (int k = 0; k < length; k++) {
			System.out.println(arr[k]);
		}
		/*foreach遍历取出数组元素
		 * foreach的语法结构：
		 * for(数组元素的类型 元素变量:遍历的对象(数组)){
		 * 		引用元素变量的java语句
		 * }
		 */
		System.out.println("-----------------------");
		for(int arrs:arr) {
			System.out.println(arrs);
		}
	}
}
